package com.example.leetcode.trainingcamp.week6.Thursday;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * 给定一个 N 叉树，返回其节点值的层序遍历。（即从左到右，逐层遍历）。
 *
 * 树的序列化输入是用层序遍历，每组子节点都由 null 值分隔（参见示例）。
 */
public class Test429 {

    public List<List<Integer>> levelOrder(Node root) {
        if (root == null) return new ArrayList<>();
        Queue<Node> queue = new LinkedList<>();
        List<List<Integer>> result = new ArrayList<>();
        queue.add(root);
        while (queue.size() != 0){
            int size = queue.size();
            List<Integer> list = new ArrayList<>();
            for (int i =0;i<size;i++){
                Node poll = queue.poll();
                for (int j = 0;j<poll.children.size();j++){
                    Node node = poll.children.get(j);
                    if (node != null) queue.add(node);
                }
                list.add(poll.val);
            }
            result.add(list);
        }
        return result;
    }
}


